package jwj8508;

public class J14_Array {

	// 배열array
	// 지금까지 우리가 사용한 변수는 하나의 저장영역에 하나의 이름으로 하나의 값만을 저장해왔다
	// 데이터 건수가 여러개인 경우에는 변수를 여러개 선언해서 사용해야 한다
	// 학생 1명의 성적처리 : 변수 7개 사용
	// 학생 10명의 성적처리 : 변수 7*10개 사용
	// 이렇게 하면 작성해야 하는 코드도 많아지고 반복문 사용도 힘들어 진다
	// 자바에서는 동일한 자료형의 객체나 기본자료형을 묶어서group 배열로 사용할 수 있다

	// 배열에 속하는 각 개체는 "배열의 구성요소"라 함
	// 배열에서 각 구성요소의 갯수를 알아내려면 length 필드를 이용
	// 배열의 각 구성요소에 값을 저장하거나 읽으려면 각 구성요소에 index(위치)를 지정해야 함
	// 배열의 index는 0부터 시작함
	// 배열은 일단 크기가 정해지면 변경 불가

	public static void main(String[] args) {
		// 배열을 사용하지 않은 성적 처리 프로그램
		int stdNo1 = 123456789; // 학생 번호
		int kor1 = 98; // 국어
		int eng1 = 99; // 영어
		int mat1 = 98; // 수학

		int stdNo2 = 234567891; // 학생 번호
		int kor2 = 99; // 국어
		int eng2 = 89; // 영어
		int mat2 = 95; // 수학

		int stdNo3 = 345678912; // 학생 번호
		int kor3 = 87; // 국어
		int eng3 = 66; // 영어
		int mat3 = 99; // 수학

		int tot1 = kor1 + eng1 + mat1; // 총점
		int tot2 = kor2 + eng2 + mat2;
		int tot3 = kor3 + eng3 + mat3;

		// ======================================================

		// 배열을 사용한 성적 처리 프로그램
		int[] stdNo = new int[3]; // 3명분의 학생 번호
		int[] kor = new int[3];
		int[] eng = new int[3];
		int[] mat = new int[3];
		int[] tot = new int[3];

		// 배열의 구성요소에 값 저장
		stdNo[0] = 123456789;
		stdNo[1] = 234567891;
		stdNo[2] = 345678912;

		kor[0] = 98;
		kor[1] = 94;
		kor[2] = 87;

		eng[0] = 96;
		eng[1] = 61;
		eng[2] = 89;

		mat[0] = 91;
		mat[1] = 87;
		mat[2] = 100;

		/*
		 * tot[0] = kor[0] + eng[0] + mat[0]; tot[1] = kor[1] + eng[1] + mat[1];
		 * tot[2] = kor[2] + eng[2] + mat[2];
		 */

		for (int i = 0; i < 3; ++i) {
			tot[i] = kor[i] + eng[i] + mat[i];
		}

		System.out.println(stdNo);
		System.out.println(stdNo[0]);
		System.out.println(stdNo[1]);
		System.out.println(stdNo[2]);

		System.out.println(kor);
		System.out.println(kor[0]);
		System.out.println(kor[1]);
		System.out.println(kor[2]);

		System.out.println(eng);
		System.out.println(eng[0]);
		System.out.println(eng[1]);
		System.out.println(eng[2]);

		System.out.println(mat);
		System.out.println(mat[0]);
		System.out.println(mat[1]);
		System.out.println(mat[2]);

		System.out.println(tot);
		System.out.println(tot[0]);
		System.out.println(tot[1]);
		System.out.println(tot[2]);

		// =====================================================

		// 문제 1 : 복권 추첨을 위한 난수 6개 만들어서 myLotto라는 배열에 저장하고 모두 출력
		// 로또 6/45에 근거해서 1-45 범위내 난수 사용
		System.out.println("=====================================");
		System.out.println("문제 1.");
		System.out.println("-------------------------------------");

		int[] myLotto = new int[6];

		for (int i = 0; i < 6; ++i) {
			myLotto[i] = (int) (Math.random() * 45) + 1;
			System.out.print(myLotto[i] + "\t");
		}
		
		// =======================================================
		System.out.println("\n=====================================");
		
		// 배열 선언 및 값 초기화
		char[] grade = { '수', '우', '미', '양', '가' };
		// char[] grade = new char[5];
		// grade[0] = '수';
		// grade[1] = '우';
		// grade[2] = '미';
		// grade[3] = '양';
		// grade[4] = '가';
		
		for (int i = 0; i < grade.length; ++i) {
			System.out.println(grade[i]);
		}
		
		// Iterating on Array
		// JDK5 이전에서는 for문과 배열의 index를 이용해서 배열의 값을 출력했음
		// JDK5 이상에서는 for문이 향상되었음
		// 배열의 index없이 배열을 반복처리 가능
		// for (배열의구성요소자료형 변수명 : 배열명)
		for (char g : grade){
			System.out.println(g);
		}
		
		for (int s : stdNo){
			System.out.println(s);
		}
		
		for (int k : kor){
			System.out.println(k);
		}
		
		for (int e : eng){
			System.out.println(e);
		}
		
		for (int m : mat){
			System.out.println(m);
		}		
		
		for (int m : myLotto){
			System.out.println(m);
		}
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		

	}

}
